﻿using System;
using System.Collections.Generic;
using System.Data;
using App_Code.Conexao;
using App_Code.Interface;
using App_Code.Vo;
using FluorineFx;
namespace App_Code.Retaguarda.BD
{
    [RemotingService]
    public class AlergiaBD: BdAbstrato<Alergia>
    {
        public AlergiaBD(ConfiguradorConexao configurador): base(configurador)
        {
        }

        public override void Adicionar(Alergia alergia)
        {
            ComandoSql("[dbo].[ins_TBL_Alergia]", CommandType.StoredProcedure);
            MontarParametros(alergia);
            ExecutarComando();
        }

        public override void Atualizar(Alergia alergia)
        {
            ComandoSql("[dbo].[atu_TBL_Alergia]", CommandType.StoredProcedure);
            MontarParametros(alergia);
            ExecutarComando();
        }

        public void Excluir(Endereco endereco)
        {
            throw new NotImplementedException();
        }

        public override Alergia Consultar(Alergia alergia)
        {
            ComandoSql("[dbo].[cons_TBL_EnderecoPorCodigoUsuario]", CommandType.StoredProcedure);
            AdicionarParametroNulo("@CODIGO_USUARIO", alergia.Usuario.Codigo);
            return MontarObjeto();
        }

        public override List<Alergia> Listar(Alergia alergia)
        {
            ComandoSql("[dbo].[cons_TBL_Alergia]", CommandType.StoredProcedure);
            AdicionarParametro("@USUARIO_CODIGO", alergia.Usuario.Codigo);
            return MontarListagem();
        }

        protected override void PreencherObjeto(ref Alergia alergia, IDataReader reader)
        {
            if (reader["CODIGO_ALERGIA"] != DBNull.Value)
            {
                alergia.Codigo = (decimal)reader["CODIGO_ALERGIA"];

                #region Usuário

                var usuario = new Usuario();
                if (reader["CODIGO_USUARIO"] != DBNull.Value)
                {
                    usuario.Codigo = (decimal)reader["CODIGO_USUARIO"];
                }
                if (reader["LOGIN_USUARIO"] != DBNull.Value)
                {
                    usuario.Login = reader["LOGIN_USUARIO"].ToString();
                }
                if (reader["NOME_USUARIO"] != DBNull.Value)
                {
                    usuario.Nome = reader["NOME_USUARIO"].ToString();
                }
                if (reader["DATA_CRIACAO"] != DBNull.Value)
                {
                    usuario.DataCriacao = (DateTime)reader["DATA_CRIACAO"];
                }
                if (reader["BLOQUEADO"] != DBNull.Value)
                {
                    usuario.Bloqueado = (bool)reader["BLOQUEADO"];
                }
                if (reader["TIPO_USUARIO"] != DBNull.Value)
                {
                    usuario.Tipo = (int)reader["TIPO_USUARIO"];
                }

                if (reader["PAI"] != DBNull.Value)
                {
                    usuario.Pai = reader["PAI"].ToString();
                }
                if (reader["MAE"] != DBNull.Value)
                {
                    usuario.Mae = reader["MAE"].ToString();
                }
                if (reader["DATA_NASCIMENTO"] != DBNull.Value)
                {
                    usuario.DataNascimento = (DateTime)reader["DATA_NASCIMENTO"];
                }

                if (reader["CONTATO_URGENTE"] != DBNull.Value)
                {
                    usuario.ContatoUrgente = reader["CONTATO_URGENTE"].ToString();
                }
                if (reader["CPF"] != DBNull.Value)
                {
                    usuario.Cpf = reader["CPF"].ToString();
                }
                if (reader["RG"] != DBNull.Value)
                {
                    usuario.Rg = reader["RG"].ToString();
                }
                if (reader["ID_MAE"] != DBNull.Value)
                {
                    usuario.CodigoMae = (decimal)reader["ID_MAE"];
                }
                if (reader["EMAIL"] != DBNull.Value)
                {
                    usuario.Email = reader["EMAIL"].ToString();
                }

                alergia.Usuario = usuario;

                #endregion

                if (reader["DESCRICAO"] != DBNull.Value)
                {
                    alergia.Descricao = reader["DESCRICAO"].ToString();
                }

                if (reader["MEDICAMENTO"] != DBNull.Value)
                {
                    alergia.Medicamento = reader["MEDICAMENTO"].ToString();
                }

                if (reader["OBSERVACAO"] != DBNull.Value)
                {
                    alergia.Observacao = reader["OBSERVACAO"].ToString();
                } 
            }
        }

        private void MontarParametros(Alergia alergia)
        {
            if (alergia.Codigo > 0)
            {
                AdicionarParametro("@codigo", alergia.Codigo); 
            }

            AdicionarParametro("@usuario_codigo", alergia.Usuario.Codigo);
            AdicionarParametro("@descricao", alergia.Descricao);
            AdicionarParametro("@medicamento", alergia.Medicamento);
            AdicionarParametro("@observacao", alergia.Observacao);


        }
    }
}
